package com.binhthuan.catechist.client.dto;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import name.pehl.piriti.client.json.Json;
import name.pehl.piriti.client.json.JsonReader;
import name.pehl.piriti.client.json.JsonWriter;

import com.google.gwt.core.client.GWT;

/**
 * @author Giang Đinh - Thông tin của giáo lý viên, tương ứng với bảng
 *         <b>giao_ly_vien</b> trong cơ sở dữ liệu.
 */
public class Catechist extends Person {

    public interface CatechistReader extends JsonReader<Catechist> {
    }
    public interface CatechistWriter extends JsonWriter<Catechist> {
    }

    public static CatechistReader READER = GWT.create(CatechistReader.class);
    public static CatechistWriter WRITER = GWT.create(CatechistWriter.class);
    
    /**
     * Ngày gia nhập.
     */
    @Json
    private Date joinDay;
    
    /**
     * Ngày kính thánh bổn mạng.
     */
    @Json
    private Date feastDay;
    
    /**
     * Email.
     */
    @Json
    private String email;
    
    /**
     * Ghi chú.
     */
    @Json
    private String comment;
    
    /**
     * Tình trạng hiện tại.
     */
    @Json
    private CatechistStatus status;
    
    /**
     * Lớp dạy hiện tại.
     */
    @Json
    private DoctrineClass doctrineClass;
    
    /**
     * Tài khoản đăng nhập.
     */
    @Json
    private Account account;
    
    /**
     * Các chức danh.
     */
    @Json
    private Set<Role> roles;

    public Catechist() {
        roles = new HashSet<Role>(0);
    }
    
    /**
     * Lấy ngày gia nhập.
     * @return Ngày gia nhập.
     */
    public Date getJoinDay() {
        return joinDay;
    }

    /**
     * Gán ngày gia nhập.
     * @param joinDay
     *            Ngày gia nhập.
     */
    public void setJoinDay(Date joinDay) {
        this.joinDay = joinDay;
    }

    /**
     * Lấy ngày kính thánh bổn mạng.
     * @return Ngày kính thánh bổn mạng.
     */
    public Date getFeastDay() {
        return feastDay;
    }

    /**
     * Gán ngày kính thánh bổn mạng.
     * @param feastDay
     *            Ngày kính thánh bổn mạng.
     */
    public void setFeastDay(Date feastDay) {
        this.feastDay = feastDay;
    }

    /**
     * Lấy email.
     * @return Email.
     */
    public String getEmail() {
        return email;
    }

    /**
     * Gán email.
     * @param email
     *            Email
     */
    public void setEmail(String email) {
        this.email = email;
    }

    /**
     * Lấy ghi chú.
     * @return Ghi chú.
     */
    public String getComment() {
        return comment;
    }

    /**
     * Gán ghi chú.
     * @param comment
     *            Ghi chú.
     */
    public void setComment(String comment) {
        this.comment = comment;
    }

    /**
     * Lấy tình trạng hiện tại.
     * @return Tình trạng hiện tại.
     */
    public CatechistStatus getStatus() {
        return status;
    }

    /**
     * Gán tình trạng.
     * @param status
     *            Tình trạng.
     */
    public void setStatus(CatechistStatus status) {
        this.status = status;
    }

    /**
     * Lấy tài khoản đăng nhập.
     * @return Tài khoản đăng nhập.
     */
    public Account getAccount() {
        return account;
    }

    /**
     * Gán tài khoản đăng nhập.
     * @param account
     *            Tài khoản đăng nhập.
     */
    public void setAccount(Account account) {
        this.account = account;
    }

    /**
     * Lấy các chức danh.
     * @return Các chúc danh.
     */
    public Set<Role> getRoles() {
        return roles;
    }

    /**
     * Gán chức danh.
     * @param roles 
     *            Các chức danh.
     */
    public void setRoles(Set<Role> roles) {
        this.roles = roles;
    }

    /**
     * Lấy lớp đang dạy.
     * @return Lớp đang phụ trách.
     */
    public DoctrineClass getDoctrineClass() {
        return doctrineClass;
    }

    /**
     * Gán lớp đang phụ trách.
     * @param doctrineClass 
     *            Lớp đang phụ trách.
     */
    public void setDoctrineClass(DoctrineClass doctrineClass) {
        this.doctrineClass = doctrineClass;
    }
}
